package com.ruoyi.cms.websocket_stomp;

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.ChannelRegistration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;

import javax.annotation.Resource;

/**
 * 类名称: WebSocketConfig
 *
 * @author sz
 * 描述:
 * 创建时间: 2024/08/15
 */
// 配置WebSocket和消息代理
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    /**
     * 注册STOMP端点
     * 此方法设置WebSocket连接的端点，允许的来源，并配置使用SockJS协议
     * SockJS是一种用于WebSocket的后备协议，可以在不支持WebSocket的旧浏览器上使用
     */
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        // 添加一个WebSocket端点，允许来自http://localhost/的跨域请求，并使用SockJS协议
        registry.addEndpoint("/ws").setAllowedOrigins("http://localhost/").withSockJS();
    }

    /**
     * 配置消息代理
     * 此方法启用简单的消息代理功能，将消息代理到特定的目的地
     * “/topic”和“/user”作为代理目标，意味着发送到这些目标的消息将由代理处理并发送给订阅了这些目标的客户端
     */
    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        // 启用对“/topic”和“/user”目的地的代理
        config.enableSimpleBroker("/topic", "/user");
    }

    /**
     * 连接之前注册登陆信息，识别身份
     * @param registration
     */
//    @Override
//    public void configureClientInboundChannel(ChannelRegistration registration) {
//        registration.interceptors(authChannelInterceptor);
//    }

}
